# -*- coding:utf-8 -*-

# @Time    : 2024/4/2 14:50
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : tele_sales_flow.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

import asyncio

from bot.insurance_planner_gpt.agent.base_agent import LLMAgent

# 询问产品意向|询问用户关注什么类型的保险，想了解什么产品，若用户两次未正面回答则直接引导加微
# 加企微|用户在表达了关注的产品/险种后，引导用户加企微详细为他讲解；但如果前几轮用户多次拒绝聊产品，则改为劝服其加企微得到后续服务；如果用户拒绝加企微需要劝服
default_template = """
作为一个专业的{role}，业务场景是通过电话引导用户添加企业微信，你需要根据对话记录选择操作流程下一步的操作节点。

操作流程如下表格：

节点|节点目标
---|---
加企微|自我介绍及引导用户添加好友,用户拒绝需要劝服
服务通知|用户同意添加企微好友后,询问用户是否收到加微服务通知
扫二维码|用户确认收到服务通知后，引导用户扫描二维码
确认已加微|确认用户完成了加微流程
挂机|确认已加微后礼貌挂机，或者用户明确拒绝了多次、用户有投诉倾向时选择挂机；

对话记录如下：
```
{conversation_history}
```

请注意:
1.操作流程节点按照表格从上到下执行,同时也要注意节点目标是否完成,在不引起用户反感的情况下,要节点目标达成后再进行下一个节点
2.根据{role}其他的话术一步一步确认操作流程的节点,但是需要忽略掉用户提出的问题,同时也忽略掉{role}对用户问题的解答
{role}的下一句的操作流程节点(仅选择操作流程表格中的一个节点)是:
"""


class TeleWechatSkill(LLMAgent):
    """销售流程机器人"""

    def __init__(self, role, conversation_history):

        self.prompt = default_template.format(role=role, conversation_history=conversation_history.strip().replace('\n\n', '\n')
                                              )
        super().__init__(self.prompt)


if __name__ == '__main__':
    conversation_history = """
    保险销售员:哎，您好 哎，您终于接电话了，看到您在泰康有个免费意外险已经领取成功了，但是保单一直没有收到，这样日后也就没办法理赔了，来电也是特意提醒您，稍后会把保单通过短信发给您，您注意查收下好吧？
用户:哦，可以。
保险销售员:好的，您的家庭意外保障权益已激活，另外考虑现在疾病频发且医疗费用高昂，我们给您限时升级成600万的医疗全险，并且免费赠送您一张价值235元的体检卡，您可以在当地做个全身体检，我带您到官方微信上看下，您电话不要挂，然后把微信打开，我带您看下，微信打开了吧？
用户:好的。
用户:这个不用你这个
保险销售员:这个交通意外险是免费给您激活的，现在一天只要几块钱就可以升级成600万的医疗全险，重疾意外医疗三险合一，您可以先了解下，参不参加您自己决定，我带您到官方微信上看下，您电话不要挂，打开免提，然后把微信打开，微信打开了吧？
用户:嗯，
    """
    user_question = TeleWechatSkill(role='保险规划师',
                                    conversation_history=conversation_history)
    user_question_list = asyncio.run(user_question.achat_auto_llm(type="gpt"))
    print(user_question_list)